// js  的异步编程理解

// 首先js是单线程的执行模式，在遇到耗时操作的时候，会阻塞，所以引入了异步的概念，异步操作回调的方式来返回耗时操作的结果。
// EventLoop :   事件循环机制负责调用栈和消息队列的任务调用，当调用栈里的任务执行完毕，EventLoop 会检查消息队列里是否有待执行的任务，如果有，会将任务放回入掉落调用栈里继续执行
// 消息队列 ：  存放异步操作
// 宏任务，微任务 :  有关异步操作的执行顺序，Promise的回调一般会作为微任务跟在当前任务结束后立即执行，settimeout  作为宏任务执行，

// // 代码题;
// // 1;
// setTimeout(() => {
//   var a = "hello";
//   setTimeout(() => {
//     var b = "lagou";
//     setTimeout(() => {
//       var c = "I love u";
//       console.log(a + b + c);
//     }, 1000);
//   }, 1000);
// }, 1000);
// // 改写 Promise

Promise.resolve("hello")
  .then((v) => {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        // console.log(v + " lagpu ");
        resolve(v + " lagpu ");
      }, 1000);
    });
  })
  .then((v) => {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        // console.log(v);
        resolve(v + " i love u");
      }, 1000);
    });
  })
  .then((v) => {
    console.log(v);
  });

  